package com.qf.filter;

import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.net.URLDecoder;

/**
 * 自动登录的过滤器
 *      拦截规则:
 *              要么用户直接访问/jsp/login.jsp 登录页面 ,进行过滤
 *               要么请求转发到/jsp/login.jsp ,进行过滤
 *
 *               urlPatterns:过滤的路径
 *               dispatcherTypes:配置过滤的规则
 *                      直接访问地址栏 的登录页面拦截或者请求转发到登录进行拦截
 */
@WebFilter(  urlPatterns = "/jsp/login.jsp",
        dispatcherTypes ={DispatcherType.REQUEST,DispatcherType.FORWARD})
public class AutoUserFilter implements Filter {
    public void destroy() {
    }

    /**
     * 过滤的任务
     * @param req 请求对象
     * @param resp  响应对象
     * @param chain  过滤链
     * @throws ServletException
     * @throws IOException
     */
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("自动登录的过滤器执行了...");
        //将req,resp强转子接口
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;

        //当前浏览器再次访问登录的时候,获取浏览器带来的所有cookie
        Cookie[] cookies = request.getCookies();
        //判断
        if(cookies!=null){
            //遍历cookie数组,获取指定cookie名称的内容
            String content = null ;//声明一个变量 cookie的内容
            for(Cookie cookie :cookies){
                //指定的cookie名称:autoUser
                if("autoUser".equals(cookie.getName())){
                    //获取这个cookie名称的内容
                    content = cookie.getValue() ;
                }
            }

            //判断content是否为空
            if(content!=null){
                //获取到,进行解码
                //jdk的解码工具:URLDecoder
                //public static String decode(String s,String enc)
                content = URLDecoder.decode(content,"utf-8") ;
                System.out.println(content);
                //拆分内容 通过"="
                String[] strs = content.split("=");
                String username = strs[0] ;//用户名
                String password = strs[1] ; //密码

                //调用用户的业务接口
                UserService userService = new UserServiceImpl() ;
                User user = userService.getUserByUsernameAndPassword(username, password);
                System.out.println(user);

                //用户登录过,存储在Session中,Session依赖于cookie存在  名称"JSESSIONID" 内容:唯一的字符串
                //判断用户是否为空
                if(user!=null){
                    //存在
                    //将存储到sesison中
                    request.getSession().setAttribute("user",user);
                    //重定向 首页
                    response.sendRedirect(request.getContextPath()+"/");

                }
            }else{
                //放行
                chain.doFilter(req, resp);
            }
        }else{
            //不存在
            chain.doFilter(req, resp); //放行
        }



    }

    public void init(FilterConfig config) throws ServletException {

    }

}
